package com.ggkt.common.utils;
import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class MD5 {
	// upflag大小写标志，1大写
	public static String Md5(String plainText, int num, int upflag) {
		StringBuffer buf = new StringBuffer();
		try {
			MessageDigest md = MessageDigest.getInstance("MD5");
			md.update(plainText.getBytes());
			byte b[] = md.digest();
			int i;
			for (int offset = 0; offset < b.length; offset++) {
				i = b[offset];
				if (i < 0){
					i += 256;
				}
				if (i < 16){
					buf.append("0");
				}
				buf.append(Integer.toHexString(i));
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		if (num == 16) {
			if (upflag == 1) {
				return buf.toString().substring(8, 24).toUpperCase();
			} else {
				return buf.toString().substring(8, 24);
			}
		} else {
			if (upflag == 1) {
				return buf.toString().toUpperCase();
			} else {
				return buf.toString();
			}
		}

	}
	
	
	 public static String Md5(String plainText, int num) {
	        StringBuffer buf = new StringBuffer();
	        try {
	            MessageDigest md = MessageDigest.getInstance("MD5");
	            md.update(plainText.getBytes());
	            byte b[] = md.digest();
	            int i;
	            for (int offset = 0; offset < b.length; offset++) {
	                i = b[offset];
	                if (i < 0){
	                    i += 256;
					}
	                if (i < 16){
	                    buf.append("0");
					}
	                buf.append(Integer.toHexString(i));
	            }
	        } catch (Exception e) {
	            e.printStackTrace();
	        }
	        if(num ==16){
	            return buf.toString().substring(8, 24);
	        }else{
	            return buf.toString();
	        }
	        
	    }
	 public static String Md5Two(String plainText, int num) {
		 StringBuffer buf = new StringBuffer();
		 try {
			 MessageDigest md = MessageDigest.getInstance("MD5");
			 md.update(plainText.getBytes("utf-8"));
			 byte b[] = md.digest();
			 int i;
			 for (int offset = 0; offset < b.length; offset++) {
				 i = b[offset];
				 if (i < 0){
					 i += 256;
				 }
				 if (i < 16){
					 buf.append("0");
				 }
				 buf.append(Integer.toHexString(i));
			 }
		 } catch (Exception e) {
			 e.printStackTrace();
		 }
		 if(num ==16){
			 return buf.toString().substring(8, 24);
		 }else{
			 return buf.toString();
		 }
		 
	 }
	 
	 //php
	 public static String md5(String str) {
	        byte[] secretBytes = null;
	        try {
	            secretBytes = MessageDigest.getInstance("md5").digest(str.getBytes());
	        } catch (NoSuchAlgorithmException e) {
	            throw new RuntimeException("没有md5这个算法！");
	        }
	        String md5code = new BigInteger(1, secretBytes).toString(16);
	        Integer length = md5code.length();
	        for (int i = 0; i < 32 - length; i++) {
	            md5code = "0" + md5code;
	        }
	        return md5code;
	    }
	 
	 public static String Md5(String plainText) {
		 return Md5(plainText, 32);
	 }
	 
	 public static String Md5Two(String plainText) {
		 return Md5Two(plainText, 32);
	 }
}
